# 项目实训
"""
1、下面程序的功能是：给定一下学生姓名和成绩，输出所有不及格的学生姓名和成绩，请找出错误并修改验证
"""
# 错误代码
students = [
    ['赵', 60],
    ['钱', 34],
    ['孙', 89],
    ['李', 56],
    ['周', 90],
]
# for student in students:
#     print(student)
    # if student < 60:
    #     name = student[1]
    #     score = student[2]
    #     print('姓名：',name,'\t','成绩：',score)
# 正确代码
for student in students:
    if student[1] < 60:
        name = student[0]
        score = student[1]
        print('姓名：',name,'\t','成绩：',score)



"""
2、下面程序的功能是：使用字典存储多个英文单词及其译文，输入英文，输出该单词的译文，请找出错误并修改验证
"""
# 错误代码
# number = int(input('请输入将要存入字典的英文单词个数：'))
# word_explain = {}
# for i in range(number):
#     word,explain = input('请输入英文：'),input('请输入对应的译文：')
#     word_explain{word} = explain
# new_word = input('请输入要翻译的英文单词：')
# if new_word in word_explain:
#     print(new_word)
# else:
#     print('no found')
# 正确代码
number = int(input('请输入将要存入字典的英文单词个数：'))
word_explain = {}
for i in range(number):
    word,explain = input('请输入英文：'),input('请输入对应的译文：')
    word_explain[word] = explain
new_word = input('请输入要翻译的英文单词：')
if new_word in word_explain:
    print(word_explain[new_word])
else:
    print('no found')

    """
    下面程序的功能是：将字符串'1a2b3c56ghjik'中的数字和字母分开并输出，然后将所有字母组合程字符串，转换成大写后输出，请将正确答案写在横线处
    s = '1a2b3c56ghjik''
    for c in s:
        if __________:
            print(c,end=' ')
    print()
    s1 = ''
    for c in s:
        if_______:
            s1 += c
            print(c,end=' ')
    print('\n',__________)
    """
    s = '1a2b3c56ghjik'
    for c in s:
        if c >= '0' and c <= '9':
            print(c, end=' ')
    print()
    s1 = ''
    for c in s:
        if c >= 'a' and c <= 'z':
            s1 += c
            print(c, end=' ')
    print('\n', s1.upper())

    """
    下面程序的功能是：合并两个元组，将合并后元组中的元素按照字符串的大小升序排列，请将正确答案写在横线处
    word1 = ('music',"piano","singing")
    word2 = ("sports",'football','high_jump')
    words = ________
    print(words)
    words_list = list(words)
    ________
    new_words = ______
    print(new_words)
    """
    word1 = ('music', "piano", "singing")
    word2 = ("sports", 'football', 'high_jump')
    words = word1 + word2
    print(words)
    words_list = list(words)  # 把元素转成列表  因为列表有 sort排序方法
    words_list.sort()
    new_words = tuple(words_list)
    print(new_words)

    """
    表4-7为某班学生的成绩，请通过已经定义好的模板"{}同学，你的考试成绩是：语文{}，英语{}，数学{}，总成绩{}，特此通知！"输出姓名和成绩
    姓名          语文          英语          数学
    张三          90            87           78
    李四          93            87           67
    王五          88            90           95
    """
    # 定义列表保存姓名和成绩
    std = [
        ['张三', 90, 87, 78],
        ['李四', 93, 87, 67],
        ['王五', 88, 90, 95]
    ]
    # 定义模板
    mod = '{}同学，你的考试成绩是：语文{}，英语{}，数学{}，总成绩{}，特此通知！'
    for st in std:
        cnt = 0
        for i in range(1, 4):
            cnt += st[i]
        print(mod.format(st[0], st[1], st[2], st[3], cnt))

        """
        编程实现，500个人围成一个圈，从1开始数，每数到3的倍数的人离开圈子，循环往复直到最后只剩一个人，输出剩下的这个人原来在圈中的位置（编号）
        """
        joseph = []  # 定义空列表
        for i in range(1, 501):  # 循环500次
            joseph.append(i)
        index = 0  # 定义index，并赋为0
        count = 0  # 定义count，并赋为0
        while len(joseph) > 1:
            count += 1  # count加1
            if count % 3 == 0:
                joseph.pop(index)
                index -= 1
            index += 1
            if index == len(joseph):
                index = 0
        print(joseph)

        """
        编程实现，使用列表保存学生的信息，包括姓名、性别、年龄，然后使用字典保存3个班级的学生信息，每个班级3个学生，以班级名为键，以存放学生信息的列表为值，最后根据输入的班级名输出该班级的学生信息
        """
        # 定义列表，每个列表保存3个学生信息
        class1 = [
            ['张三丰', '男', 7],
            ['杨过', '男', 9],
            ['郭靖', '女', 8]
        ]
        class2 = [
            ['刘备', '男', 10],
            ['孙尚香', '女', 8],
            ['诸葛亮', '男', 9]
        ]
        class3 = [
            ['许明明', '女', 11],
            ['刘能', '男', 12],
            ['马三', '男', 10]
        ]
        # 定义字典，并将列表添加到字典中
        grade = {}
        grade['三年级一班'] = class1
        grade['三年级二班'] = class2
        grade['四年级一班'] = class3
        class_name = input('请输入班级名：')
        print(class_name, '的学生信息：')
        for key in grade.keys():  # 遍历字典的键
            if key == class_name:  # 如果键等于输入的班级名
                for student in grade[key]:  # 遍历输入的班级名对应的值
                    for info in student:  # 遍历学生信息列表
                        print(info, end=' ')
                    print()


# 项目考核

"""
1、下面数据类型中，不支持分片操作的是（C）
A.字符串
B.列表
C.字典
D.元组

2、下面方法中，能够返回某个子串在字符中出现的次数的是（B）
A.len()
B.count()
C.find()
D.split()

3、下面列表的说法，描述错误的是（A）
A.list是不可变的数据类型
B.list是一个有序序列，没有固定的大小
C.list可以存放任意类型的元素
D.使用list时，其下表可以时负数

4、下面说法错误的是（A）
A.通过下标索引可以修改和访问元组的元素（）
B.元组的索引是从0开始的
C.通过insert方法可以在列表指定位置插入元素
D.使用下表索引能够修改列表的元素

5、假设要随机删除字典中的“键-值”对，使用下面那种方法（B）
A.pop
B.popitem
C.del
D.clear

6、下面选项中，不能使用下标运算的是(C)
A.列表
B.元素
C.集合
D.字符串
"""

"""
1、s='hello',t='world',s+=t,则s为_helloworld_,s[-1]为_d_,s[2:5]为_llo_,s[::3]为_hlod_,s[-2::-1]为_lrowolleh_。

2、s="Python String"，写出下面操作的输出结果。
    s.upper()输出结果为_PYTHON STRING_
    s.lower()输出结果为_python string_
    s.find("i")输出结果为_10_
    s.replace('ing','gni')输出结果为_Python Strgni_

3、元组使用_小括号_包含元素，列表使用_中括号_包含元素。

4、下面程序的输出结果是_____。
list_a = [5,2,10,6,8,13,7]
list_a.reverse()
print(list_a[2]) #  8

5、使用fromkeys()方法创建字典，执行下面程序，则运算结果为_{'name': None, 'age': None, 'weight': None, 'height': None}_
pet_dict = dict.fromkeys(['name','age','weight','height'])
print(pet_dict)
pet_dict = {
    "name":None,
    "age":None,
    "weight":None,
    "height":None,
}

6、下面程序实现遍历字典中所有的值，请在_for value in num_dict.values():_内填空
num_dict = {'a':'1','b':'2','c':'3'}
______
print(value)
"""



"""
已知某学校的课程安排如表4-8所示
    教师      课程
    吕红      数据库
    周婷      线性代数
    肖扬      Python
    李娟      数据库
    丁锦      英语
    周玲玲     Java
1、创建一个字典，以教师名为键，以课程为值，存储课程安排信息
2、增加一条信息赵红讲授Java
3、周玲玲改为讲授Python
4、删除周婷的授课信息
5、遍历字典，输出所有教师及授课的课程，以及输出所有讲授Python的教师
"""
dictCourse = {
    '吕红': '数据库',
    '周婷': '线性代数',
    '肖扬': 'Python',
    '李娟': '数据库',
    '丁锦': '英语',
    '周玲玲': 'Java'
}

dictCourse['赵红'] = 'Java'
print(dictCourse)
dictCourse['周玲玲'] = 'Python'
print(dictCourse)
del dictCourse['周婷']
print(dictCourse)

for teacher,course in dictCourse.items():
    print(teacher,course)
for teacher,course in dictCourse.items():
    if course == 'Python':
        print(teacher)



"""
编程实现登录验证，要求如下：
1、输入用户名和密码
2、验证成功显示登录成功，并退出程序
3、同一个用户输错3次密码后被锁定，并退出程序
"""

#定义字典用于存储用户信息
dict1 = {'小蓝': [123456, 0], '小明': [12345678, 0]}
while True:
    name = input('请输入用户名：')
    password = int(input('请输入密码:'))
    if name not in dict1.keys():
        print('该用户不存在')
        continue
    elif password == dict1[name][0]:
        print('登录成功')
        break
    else:
        print('密码错误')
        dict1[name][1] += 1
        if dict1[name][1] == 3:
            print('3次密码错误，该用户名已被锁定')
            break


"""
编写程序，实现从键盘输入一个字符串，去重后按字符升序输出
"""
strs = input('请输入一个字符串:')
setStrs = set(strs)
listStrs = list(setStrs)
print(listStrs)
listStrs.sort()
for s in listStrs:
    print(s,end='')